定期ミートアップ 第74回
BiwaScheme
((letrec ((x 0)) (lambda (x) (+ x))) 1)
code:scm
(define (f)
(define t 0)
(define (g t)
(display t) (newline))
(g t))
(f)
Claude Code「VMの実装にバグがありますね」
→嘘
lambdaの実装にバグがあった
ここは自前(3impは可変長引数未対応)なので納得
Shiika
これまでのあらすじ
一通り言語側を作ったあと、IOクラスを実装しようとした
先に非同期まわりのポリシーを固めたほうがよいことに気づく
(readとasync_readが両方あるみたいなのを避けたいので)
非同期
Shiikaのメソッド(=LLVMレベルでは、function)をCPS変換し、Rustのtokio crateに乗せる
raviqqeさんのPen言語を参考
tokioはシングルスレッドモードで使う
ala JavaScript
ロックについてあまり考えなくてすむ
※もちろんアプリレベルのロックは依然として必要
長期的には別スレッドの活用も考えると面白いかも
いけそうな感じなので、Shiika本体にバックポート中
Moduleの実装をします→class objectが必要→.nameがないとデバッグが難しい→先にivar作るか→てかStringクラスがない
以前の構成:AST→HIR→LLVM IR
プロトの構成:AST→HIR→MIR→LLVM IR
最近やってたこと:プロトのHIRをベースに機能を盛っていく
昨日気づいたこと:旧HIRからMIRを作ればよいのでは…?